package _0007;

/**
 * @author HMF
 * @create 2021-05-08 9:25
 */

/**
 * 0007.整数反转
 * <p>
 * 给你一个 32 位的有符号整数 x ，返回将 x 中的数字部分反转后的结果。
 * 如果反转后整数超过 32 位的有符号整数的范围 [−231,  231 − 1] ，就返回 0。
 * 假设环境不允许存储 64 位整数（有符号或无符号）。
 * <p>
 */

public class Solution {
    // 反转
    public static int reverse(int x) {
//        int aa = (int)Math.pow(2, 31) - 1; // 2147483646
//        int bb = -(int)Math.pow(2, 31); // -2147483647

        int res = 0;

        while (x != 0) {
            int last = x % 10; // 每次取末尾数字，取余取出末尾的数字

            if (res > 214748364 || (res == 214748364 && last > 6)) { // 判断反转后的整数是否在规定范围内
                return 0;
            }
            if (res < -214748364 || (res == 214748364 && last < -7)) { // 判断反转后的整数是否在规定范围内
                return 0;
            }

            res = res * 10 + last; // 每次反转后整数
            x /= 10; // 消掉一个末尾的数
        }

        return res; // 返回反转后的数
    }

    public static void main(String[] args) {
        int before = 123000;
        int after = reverse(before);
        System.out.println("before：" + before);
        System.out.println("after：" + after);
    }
}


